package com.xinqi.mycontext.impl;

import com.xinqi.mycontext.MyApplicationContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.HashMap;
import java.util.Map;

/**
 * @author xin麒
 * @date 2022/9/9
 */

public class MyApplicationContextImpl implements MyApplicationContext {
    private Map<String, Object> iocContain = new HashMap<>();

    @Override
    public Object getBean(String beanId) {
        return iocContain.get(beanId);
    }

    public MyApplicationContextImpl() {
        //spring_ioc_annotation.xml文件是记录了bean信息的文件，可以通过该文件获取bean的信息（文件名称可以自定义）
        //获取ioc对象，ioc是一个容器，通过ClassPathXmlApplicationContext获取参数，参数为：spring_ioc_annotation.xml
        //           ioc获取了记录bean信息的文件后，那么bean对象就存在于ioc里面了
        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("spring_ioc_annotation.xml");

        //getBeanDefinitionNames是ioc的一个获取所有bean对象名称的api,将所有bean的名称封装到一个字符串数组返回
        String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            //getBean可以通过bean对象名称获取该bean对象
            Object bean = ioc.getBean(beanDefinitionName);
            //map的put方法将键值对建立关系存到map内部
            iocContain.put(beanDefinitionName,bean);
        }
    }
}
